package com.maishi.programmer.jainzhioffer;

/**
 * Created by brossdong on 2018/4/25.
 * 表示数值的字符串
 */
public class TestProblem20 {

    /**
     * 请实现一个函数用来判断字符串是否表示数值（包括整数和小数）。
     * 例如，字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。
     * 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
     */
    private int index;
    public boolean isNumeric(char[] str) {
        if (str.length < 1 || str == null) return false;
        index = 0;
        boolean flag = scanInteger(str);
        //判断小数部分
        if(index < str.length && str[index]=='.'){
            index = index + 1;
            flag = scanUInteger(str)||flag;     //解释a,见代码下方
        }
        //判断指数部分
        if(index<str.length && (str[index]=='e' || str[index]=='E')){
            index = index+1;
            flag = flag&&scanInteger(str);
        }
        return flag && index >= str.length;

    }
    //判断是否是整数
    private boolean scanInteger(char[] str) {
        if (index < str.length && (str[index] == '+' || str[index] == '-')) {
            index = index + 1;
        }
        return scanUInteger(str);
    }
    //判断是否是无符号整数
    private boolean scanUInteger(char[] str) {
        int inx1 = index;
        while(index < str.length && str[index] >= '0' && str[index] <= '9'){
            index = index + 1;
        }
        return index > inx1;
    }

}
